#include	"Vector2i.h"
#include	<cmath>

Vector2i::Vector2i()
{
}

Vector2i::~Vector2i()
{
}

Vector2i::Vector2i(int x, int y)
{
	Set(x, y);
}

Vector2i::Vector2i(const Vector2i & vec)
{
	Set(vec);
}

Vector2i::Vector2i(const int * arr)
{
	Set(arr);
}

void Vector2i::Set(int x, int y)
{
	m_data[0] = x;
	m_data[1] = y;
}

void Vector2i::Set(const int * arr)
{
	m_data[0] = arr[0];
	m_data[1] = arr[1];
}

Vector2i::operator const int*() const
{
	return m_data;
}

Vector2i::operator int*()
{
	return m_data;
}

const Vector2i & Vector2i::operator+() const
{
	return *this;
}

Vector2i & Vector2i::operator+()
{
	return *this;
}

Vector2i Vector2i::operator-() const
{
	return Vector2i(-m_data[0], -m_data[1]);
}

Vector2i & Vector2i::operator=(const Vector2i & vec)
{
	Set(vec);
	return *this;
}

Vector2i & Vector2i::operator+=(const Vector2i & vec)
{
	Set(m_data[0] + vec[0], m_data[1] + vec[1]);
	return *this;
}

Vector2i & Vector2i::operator-=(const Vector2i & vec)
{
	Set(m_data[0] - vec[0], m_data[1] - vec[1]);
	return *this;
}

Vector2i & Vector2i::operator*=(int num)
{
	Set(m_data[0] * num, m_data[1] * num);
	return *this;
}

Vector2i & Vector2i::operator/=(int num)
{
	Set(m_data[0] / num, m_data[1] / num);
	return *this;
}

Vector2i Vector2i::operator+(const Vector2i & vec) const
{
	return Vector2i(m_data[0] + vec[0], m_data[1] + vec[1]);
}

Vector2i Vector2i::operator-(const Vector2i & vec) const
{
	return Vector2i(m_data[0] - vec[0], m_data[1] - vec[1]);
}

Vector2i Vector2i::operator*(int num) const
{
	return Vector2i(m_data[0] * num, m_data[1] * num);
}

Vector2i Vector2i::operator/(int num) const
{
	return Vector2i(m_data[0] / num, m_data[1] / num);
}

Vector2i operator*(int num, const Vector2i & vec)
{
	return Vector2i(vec[0] * num, vec[1] * num);
}

bool Vector2i::operator==(const Vector2i & vec) const
{
	return (m_data[0] == vec[0]) && (m_data[1] == vec[1]);
}

bool Vector2i::operator!=(const Vector2i & vec) const
{
	return (m_data[0] != vec[0]) || (m_data[1] != vec[1]);
}

double Vector2i::LengthSquare() const
{
	return double(m_data[0] * m_data[0]) + double(m_data[1] * m_data[1]);
}

double Vector2i::Length() const
{
	return std::sqrt(double(m_data[0] * m_data[0]) + double(m_data[1] * m_data[1]));
}

